Pandas的DataFrame是二維陣列,是使用橫向索引(列)與直向欄位(行)組合起來的資料內容。
創建DataFrame語法為:
pd.DataFrame(資料,index=索引,columns=欄位)
資料可用串列(list)、元組(tuple)、字典(dictionary)、Numpy陣列,或組合Series物件成為資料來源。index(索引)為橫向的列,columns(欄位)為直向的欄位名稱,預設為0開始之整數串列。
建立一個水果行之4位客人,分別為5種水果打下分數的DataFrame,若使用二維串列當作資料來源:
import pandas as pd
pd.DataFrame([[8,7,6,5,4],[3,4,2,9,5],[4,6,7,2,8],[2,7,6,3,9]])
執行結果:
0 1 2 3 4
0 8 7 6 5 4
1 3 4 2 9 5
2 4 6 7 2 8
3 2 7 6 3 9
加入客戶名稱為index,各種水果被打下的分數為columns:
import pandas as pd
pd.DataFrame([[8,7,6,5,4],[3,4,2,9,5],[4,6,7,2,8],[2,7,6,3,9]],index=['小明','小美','小英','小玉'],columns=['蘋果','芭樂','香蕉','橘子','檸檬'])
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7 6 5 4
小美 3 4 2 9 5
小英 4 6 7 2 8
小玉 2 7 6 3 9
一、利用串列及字典建立DataFrame
(1)以字典建立DataFrame
import pandas as pd
fruit={'蘋果':{'小明':8,'小美':3,'小英':4,'小玉':2},'芭樂':{'小明':7,'小美':4,'小英':6,'小玉':7},'香蕉':{'小明':6,'小美':2,'小英':7,'小玉':6},'橘子':{'小明':5,'小美':9,'小英':2,'小玉':3},'檸檬':{'小明':4,'小美':5,'小英':8,'小玉':9},}
df=pd.DataFrame(fruit)
print(df)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7 6 5 4
小美 3 4 2 9 5
小英 4 6 7 2 8
小玉 2 7 6 3 9
(2)以串列建立DataFrame
import pandas as pd
se1=pd.Series({'小明':8,'小美':3,'小英':4,'小玉':2})
se2=pd.Series({'小明':7,'小美':4,'小英':6,'小玉':7})
se3=pd.Series({'小明':6,'小美':2,'小英':7,'小玉':6})
se4=pd.Series({'小明':5,'小美':9,'小英':2,'小玉':3})
se5=pd.Series({'小明':4,'小美':5,'小英':8,'小玉':9})
df=pd.DataFrame({'蘋果':se1,'芭樂':se2,'香蕉':se3,'橘子':se4,'檸檬':se5})
print(df)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7 6 5 4
小美 3 4 2 9 5
小英 4 6 7 2 8
小玉 2 7 6 3 9
二、DataFrame取值
(1)以欄位名稱取值
df[欄位名稱]
df['橘子']
執行結果:
小明 5
小美 9
小英 2
小玉 3
Name: 橘子, dtype: int64
也可以使用邏輯運算來取得資料:
df[df['芭樂']>=6]
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7 6 5 4
小英 4 6 7 2 8
小玉 2 7 6 3 9
(2)以values屬性取值
DataFrame的values屬性可取得全部資料,返回二維串列
df.values
執行結果:
array([[8, 7, 6, 5, 4],
[3, 4, 2, 9, 5],
[4, 6, 7, 2, 8],
[2, 7, 6, 3, 9]])
取得第三位客戶的分數
df.values[2]
執行結果:
array([4, 6, 7, 2, 8])
取得第四位客人第五種水果的分數
df.values[3][4]
執行結果:
9
(3)以索引及欄位名稱取值
loc可直接以索引及欄位名稱取值
df.loc[索引名稱,欄位名稱]
df.loc['小明','香蕉']
執行結果:
6
df.loc['小明':'小英','香蕉':'檸檬']
執行結果:
香蕉 橘子 檸檬
小明 6 5 4
小美 2 9 5
小英 7 2 8
df.loc['小明':,:'香蕉']
執行結果:
蘋果 芭樂 香蕉
小明 8 7 6
小美 3 4 2
小英 4 6 7
小玉 2 7 6
(4)以索引及欄位編號取值
iloc可直接以索引及欄位編號取值
df.iloc[索引編號,欄位編號]
df.iloc[2,3]
執行結果:
2
df.iloc[1:3,3:5]
執行結果:
橘子 檸檬
小美 9 5
小英 2 8
df.iloc[:3,2:]
執行結果:
香蕉 橘子 檸檬
小明 6 5 4
小美 2 9 5
小英 7 2 8
(5)取得最前或最後數列資料
取得最前面n列資料
df.head(n)
df.head(2)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7 6 5 4
小美 3 4 2 9 5
取得最後面n列資料
df.tail(n)
df.tail(2)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小英 4 6 7 2 8
小玉 2 7 6 3 9
完成二維的創建及取值了~明天我們來介紹簡單的資料操作囉~!!